/**
 * @param {string} start
 * @param {string} end
 * @param {string[]} bank
 * @return {number}
 */
var minMutation = function (start, end, bank) {
    const set = new Set(bank);
};

// var ladderLength = function (start, end, bank) {
var minMutation = function (start, end, bank) {
    const arr = ['A', 'C', 'G', 'T'];
    const wordSet = new Set(bank);
    const queue = [];
    queue.push([start, 1]);
    while (queue.length) {
        const [word, level] = queue.shift(); // 当前出列的单词
        if (word == end) {
            return level;
        }
        for (let i = 0; i < word.length; i++) {
            // 遍历当前单词的所有字符
            for (let c of arr) {
                // 对应26个字母
                const newWord = word.slice(0, i) + c + word.slice(i + 1); // 形成新词
                if (wordSet.has(newWord)) {
                    // 单词表里有这个新词
                    queue.push([newWord, level + 1]); // 作为下一层的词入列
                    wordSet.delete(newWord); // 避免该词重复入列
                }
            }
        }
    }
    return -1; // bfs结束，始终没有遇到终点
};
